package com.ruoyi.system.utils;

/**
 * 差分包版本号生成工具
 */
public class PatchVersionUtil {


    /**
     * 生成差分包版本编号
     * 格式: 旧版本Code_新版本Code
     * 支持字符串类型的版本代码
     */
    public static String generatePatchVersionCode(String oldVersionCode, String newVersionCode) {
        if (oldVersionCode == null) oldVersionCode = "unknown";
        if (newVersionCode == null) newVersionCode = "unknown";

        return String.format("%s-%s",
                sanitizeVersionCode(oldVersionCode),
                sanitizeVersionCode(newVersionCode));
    }

    /**
     * 生成差分包版本名称
     * 格式: 旧版本Name-to-新版本Name
     * 支持字符串类型的版本名称
     */
    public static String generatePatchVersionName(String oldVersionName, String newVersionName) {
        if (oldVersionName == null) oldVersionName = "unknown";
        if (newVersionName == null) newVersionName = "unknown";

        return String.format("%s-%s",
                sanitizeVersionName(oldVersionName),
                sanitizeVersionName(newVersionName));
    }

    /**
     * 清理版本代码中的非法字符（用于文件命名）
     */
    private static String sanitizeVersionCode(String versionCode) {
        if (versionCode == null) return "unknown";
        // 版本代码通常只包含数字，但也要处理可能的分隔符
        return versionCode.replaceAll("[^a-zA-Z0-9._-]", "_");
    }



    /**
     * 清理版本名称中的非法字符
     */
    private static String sanitizeVersionName(String versionName) {
        if (versionName == null) return "unknown";
        return versionName.replaceAll("[^a-zA-Z0-9._-]", "_");
    }

    /**
     * 从差分包版本编号解析版本信息
     */
    public static int[] parsePatchVersionCode(String patchVersionCode) {
        String[] parts = patchVersionCode.split("_");
        if (parts.length == 2) {
            try {
                int oldVersion = Integer.parseInt(parts[0]);
                int newVersion = Integer.parseInt(parts[1]);
                return new int[]{oldVersion, newVersion};
            } catch (NumberFormatException e) {
                // 忽略解析错误
            }
        }
        return new int[]{0, 0};
    }
}